# 获取存储过程中的所有表
import re
import os

filePath = r"D:\test\txt"  # input() #文件夹路径
fileEncoding = "GBK"  # 文本编码格式
listTables = ["ods_it_f", "adm_rs_it", "ods_it_g"]  # 需要查询的表前缀
listDel = ["ods_it_g.P_LBR_PROC_ETL_SETPARM", "LBR.P_LBR_PROC_ETL_JOBERROR"]  # 参数表等不需要的表名称


# 获取对应的表名称
def replaceText(file, iq):
    var1 = re.search(iq.replace("_", "\_") + "\.\w*", file)
    if var1:
        return var1.group()


# 获取文件路径下所有文件名称
def fileNames(dirK_path):
    # 判断目录是否存在
    if os.path.isdir(dirK_path):
        for _, _, files in os.walk(dirK_path):
            return files  # 获取文件夹下所有文件
    else:
        print("当前文件目录不存在!")


# 文件处理过程
def fileProcess(fileName):
    list1 = []
    with open(filePath + "/" + fileName, "r", encoding=fileEncoding) as fo:
        for fileText in fo:
            for iq in listTables:  # 循环表前缀
                if iq in fileText:  # 有表前缀的行进行抓取
                    text2 = replaceText(fileText, iq)
                    list1.append(text2)

    list2 = list(set(list1))  # 去重
    list2.sort()  # 排序
    list2.append(fileName)  # 追加存储过程名称在列表最后
    text1 = ' '.join(list2)
    for delText in listDel:
        text1 = text1.replace(delText, "")
    return text1


# 引用文件夹下的文件
files = fileNames(filePath)

# 判断生成的表名列表对应的文件夹是否存在
if not os.path.isdir(filePath + "/uu"):
    os.mkdir(filePath + "/uu")
with open(filePath + "/uu/文件名列表.txt", "w", encoding=fileEncoding) as fo1:
    for file in files:
        text = fileProcess(file)
        fo1.seek(0, 2)  # 设置追加到末尾
        fo1.write(text + "\n")  # 转换列表为字符串并写入文件换行
